import LevelService from '../../../dataservice/LevelService'
const levelService = new LevelService()
import UserService from '../../../dataservice/UserService'
const userService = new UserService()
import ProductService from '../../../dataservice/ProductService'
const productService = new ProductService()

// 设置会员享受的最大折扣
const MEMBERSHOPDISCOUNT = 0.7
Page({

  /**
   * 页面的初始数据
   */
  data: {
    inited: false,
    productInfo: {}, // 存储的商品详细信息
    isMembershipExpired: true, // 当前用户是否小飒卡会员 ,true：过期,false:有效期内
    discount: 1, // 购买商品时的折扣（无论用是否会员，购买商品时都能偶享受一定的折扣，出奶嘴等级外）
    discountedPrice: 0, // 购买商品时实际的支付价格
    price: 0, // 商品原价
    myLevel: {}, // 用户的级别信息
    myInfo: {}, // 用户信息  
    isNoMoreData: false, //是否没有更多数据 
    cart: [], //保存购物车中的商品数量（在详情页的我购物车bage中显示购物车中的数量）
  },

  /**
   * 生命周期函数--监听页面加载
   * 根据传递过来的商品的index的值去product集合中获取此商品的详细信息
   */
  onLoad: function (options) {
    this.setUserAndProductData(options.index)
    // 页面加载时，立即加载购物车中是否有数据
    this.initCart()
  },
  /**
   * 根据商品的index获取商品的详细信息和当前登录用户的信息
   */
  setUserAndProductData(index) {
    // 显示加载动画
    wx.showNavigationBarLoading()
    let that = this
    levelService.getLevelist(function (levellist) {
      let levels = levellist
      // 获取当前用户信息
      userService.getUserInfo(function (userInfo) {
        let myInfo = userInfo
        let mylevel = levels.filter(item => {
          return myInfo.growthValue >= item.minGrowthValue && myInfo.growthValue <= item.maxGrowthValue
        })[0]
        // 计算用户的会员是否在有效期内
        let isMembershipExpired = myInfo.memberExpDate < new Date()
        // 设置用户的级别和用户信息
        that.setData({
          myLevel: mylevel,
          myInfo: myInfo,
          isMembershipExpired: isMembershipExpired
        })
        // 计算当前用户购买商品的折扣
        that.getDiscount(isMembershipExpired, mylevel)
        // 获取商品的信息
        that.getProduct(index)
      })
    })
    this.setData({
      inited: true
    })
    // 隐藏加载动画
    wx.hideNavigationBarLoading()
  },
  /**
   * 计算当前用户购买上坡的折扣
   * isMembershipExpired:当前用户是否会员,true：不是;false:是
   * mylevel：当前用户的级别信息
   */
  getDiscount(isMembershipExpired, mylevel) {
    if (!isMembershipExpired) {
      // 如果是会员
      this.setData({
        discount: MEMBERSHOPDISCOUNT
      })
    } else if (mylevel.bonus.length === 3) {
      // 大于奶嘴的级别
      this.setData({
        discount: mylevel.bonus[1].discount
      })
    }
  },
  // 获取商品的信息
  getProduct(index) {
    let that = this
    productService.getProductByIndex(index)
      .then(res => {
        let productInfo = res.data[0]
        that.setData({
          productInfo: productInfo,
          price: productInfo.price,
          discountedPrice: Math.ceil(productInfo.price * that.data.discount)
        })
        // 打开详情页后，获取相关类别商品数据
        this.getProductList(true)
      })
      .catch(err => {
        console.log(err)
      })
  },

  /**
   * 查询当前商品相关商品的信息
   * 1）相关商品定义：与当前商品类别相同的商品 
   */
  getProductList(isReset) {
    productService.getProductList(this.data.productInfo.secondcategory, '', isReset).then(res => {
      // 如果没有更多数据，就不再赋值
      if (res.data.length < 1) {
        this.setData({
          isNoMoreData: true
        })
        return
      }
      /**
       * 希望重新加载
       * 将数据传递给组件
       */
      this.selectComponent("#productList").fillData(isReset, res.data)
    }).catch(err => {
      console.log(err)
    })
  },
  /**
   *  添加购物车
   * 1、将当前选择的商品整个 对象加入购物车
   * 2、购物车信息保存到本地缓存中
   * 
   * 购物车中的数据：
   *  每件商品对应一个对象在缓存中以数组形式存储
   * 首先判断购物车中是否有相同数据，如果购物车中没有相同的商品，就添加，否则不添加
   */
  addCart() {
    let value = wx.getStorageSync('cart')
    if (value) {
      let arr = value.filter(item => item.index === this.data.productInfo.index)
      //  如果购物车中没有相同的商品，就添加，否则不添加
      if (arr.length < 1) {
        value.push(this.data.productInfo)
        this.addCartSave(value)
      } else {
        wx.showToast({
          title: '该商品已经在购物车中',
          icon: "none"
        })
      }
    } else {
      value = []
      value.push(this.data.productInfo)
      this.addCartSave(value)
    }

  },
  // 保存数据到购物车（缓存的方法）
  addCartSave(value) {
    // 将商品数据 添加至购物车（缓存）
    try {
      wx.setStorageSync('cart', value)
      // 将购物车中的数据保存一份到cart数组中，用于展示购物车中的数量
      this.setData({
        cart: value
      })
      wx.showToast({
        title: '添加购物车成功！',
      })
    } catch (err) {
      wx.showToast({
        title: '添加购物车失败，请重试',
        icon: "none"
      })
    }
  },
  // 页面加载时，立即加载购物车中是否有数据
  initCart() {
    const value = wx.getStorageSync('cart')
    if (value) {
      this.setData({
        cart: value
      })
    } else {
      this.setData({
        cart: []
      })
    }
  },
  onReachBottom() {
    // 如果没有更多数据，就不再请求
    if (!this.data.isNoMoreData) {
      //2） 上拉加载更多相关相关商品，并不重置页码
      this.getProductList(false)
    }
  },
  // 页面重新进入时，重新赋值购物车中的商品数量
  onShow() {
    this.initCart()
  },
  /**
   * 购买会员套餐按钮点击事件
   */
  onPayButtonClick: function (event) {
    //如果用户积分不够支付，提示
    if (this.data.myInfo.point < this.data.discountedPrice) {
      wx.showModal({
        content: '很抱歉，你的积分不足，无法购买',
        showCancel: false,
      })
    } else {
      var that = this
      //支付操作，需要弹出确认支付窗口进行二次确认
      wx.showModal({
        title: '积分支付',
        content: '你即将支付p' + this.data.discountedPrice.toString(),
        confirmText: "确认",
        cancelText: "取消",
        success: function (res) {
          //用户确认支付
          if (res.confirm) {
            //页面提示支付中
            wx.showLoading({
              title: '支付中',
            })
            var productsIndex = [that.data.productInfo.index]
            //调用云函数执行购买购物车中所有商品的操作
            console.log(productsIndex)
            wx.cloud.callFunction({
              name: 'payProduct',
              data: {
                productsIndex: productsIndex,
                formId: event.detail.formId //用于发送模板消息，详见https://developers.weixin.qq.com/miniprogram/dev/api-backend/templateMessage.send.html
              },
              success: function (res) {
                //根据云函数返回值，决定显示支付成功、支付失败或其他提示
                if (res.result.data == true) {
                  that.setData({
                    showPaySuccess: true
                  })
                } else if (res.result.errMsg == "很抱歉，你的积分不足，无法购买") {
                  wx.showModal({
                    content: '很抱歉，你的积分不足，无法购买',
                    showCancel: false,
                  })
                } else {
                  that.setData({
                    showPayFaild: true
                  })
                }
              },
              fail: function (err) {
                //调用云函数失败，显示支付失败提示界面
                console.log('onPayButtonClick---err' + JSON.stringify(err) + "\r\n")
                that.setData({
                  showPayFaild: true
                })
              },
              complete: function () {
                wx.hideLoading(); //关闭支付中页面提示
              }
            })
          }
        }
      })
    }
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    //自定义商品的转发内容，详见onShareAppMessage的官方说明文文档https://developers.weixin.qq.com/miniprogram/dev/reference/api/Page.html
    return {
      title: this.data.productInfo.bookname,
      imageUrl: this.data.productInfo.coverimg,
      path: '/pages/shop/product/product?index=' + this.data.productInfo.index
    }
  }
})